package com.xueyi.workflow.service;

import org.flowable.task.service.delegate.DelegateTask;

import java.util.Set;

/**
 * 工作流用户服务接口
 * 处理用户、角色、部门、岗位、表达式的映射关系
 *
 * @author xueyi
 * @date 2024-07-03
 */
public interface IWorkflowUserService {

    /**
     * 根据角色ID集合查询用户ID集合
     *
     * @param roleIds 角色ID集合
     * @return 用户ID集合
     */
    Set<Long> getUserIdsByRoleIds(Set<Long> roleIds);

    /**
     * 根据部门ID集合查询用户ID集合
     *
     * @param deptIds 部门ID集合
     * @return 用户ID集合
     */
    Set<Long> getUserIdsByDeptIds(Set<Long> deptIds);

    /**
     * 根据岗位ID集合查询用户ID集合
     *
     * @param postIds 岗位ID集合
     * @return 用户ID集合
     */
    Set<Long> getUserIdsByPostIds(Set<Long> postIds);

    /**
     * 根据角色、部门、岗位ID集合查询用户ID集合
     *
     * @param roleIds 角色ID集合
     * @param deptIds 部门ID集合
     * @param postIds 岗位ID集合
     * @return 用户ID集合
     */
    Set<Long> getUserIdsByGroups(Set<Long> roleIds, Set<Long> deptIds, Set<Long> postIds);

    /**
     * 根据表达式集合查询用户ID集合
     *
     * @param expressions 表达式集合，如${starter}, ${starterDeptLeader}
     * @param delegateTask 任务委托对象，用于获取流程变量
     * @return 用户ID集合
     */
    Set<Long> getUserIdsByExpressions(Set<String> expressions, DelegateTask delegateTask);
} 